package BloodTimeHybernateDO;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.annotations.Proxy;

import dao.api.DataObject;

/**
 * 
 * @author Manuel A. Quintero V.
 *
 */
@Entity
@Table(name = "articulo")
@Inheritance(strategy = InheritanceType.JOINED)
@Proxy(lazy = false)
public class ArticuloDO implements DataObject{
	

	// -------------------------------
	// Identificador auto-incremental
	// -------------------------------
	
	protected int id;
	
	// --------------------
	// Atributos de Articulo
	// --------------------
	
	protected String nombre;
	protected String descripcion;
	protected byte [] imagen ;
	protected float precioCompra;
	protected float precioVenta;
	
	// ------------
	// Referencias
	// ------------
	
	protected List<VampiroArticuloDO> vampiroArticuloList = //
		new ArrayList<VampiroArticuloDO>();
	
	protected List<CiudadArticuloDO> ciudadArticuloList = //
		new ArrayList<CiudadArticuloDO>();
	
	// ------------------------------------------------------------------------
	
	public ArticuloDO() {
		// Empty
	}
	
	@Override
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="articulo_sequence")
	@SequenceGenerator(sequenceName = "articulo_sequence", name = "articulo_sequence",allocationSize=1)
	public int getId() {
		return id;
	}

	@Override
	public void setId(int id) {
		this.id=id;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombre() {
		return nombre;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setImagen(byte [] imagen) {
		this.imagen = imagen;
	}

	public byte [] getImagen() {
		return imagen;
	}

	public void setPrecioCompra(float precioCompra) {
		this.precioCompra = precioCompra;
	}

	public float getPrecioCompra() {
		return precioCompra;
	}

	public void setPrecioVenta(float precioVenta) {
		this.precioVenta = precioVenta;
	}

	public float getPrecioVenta() {
		return precioVenta;
	}

	public void setVampiroArticuloList(List<VampiroArticuloDO> vampiroArticuloList) {
		this.vampiroArticuloList = vampiroArticuloList;
	}
	@OneToMany(mappedBy = "articuloId")
	@LazyCollection(LazyCollectionOption.TRUE)
	@Cascade( { CascadeType.ALL, CascadeType.DELETE_ORPHAN })
	public List<VampiroArticuloDO> getVampiroArticuloList() {
		return vampiroArticuloList;
	}

	public void setCiudadArticuloList(List<CiudadArticuloDO> ciudadArticuloList) {
		this.ciudadArticuloList = ciudadArticuloList;
	}
	@OneToMany(mappedBy = "articuloId")
	@LazyCollection(LazyCollectionOption.TRUE)
	@Cascade( { CascadeType.ALL, CascadeType.DELETE_ORPHAN })
	public List<CiudadArticuloDO> getCiudadArticuloList() {
		return ciudadArticuloList;
	}

}
